/**
 * 书籍类，继承自商品基类
 * 包含书籍特有的属性和方法
 */
public class BookProduct extends Product {
    private String author;        // 作者
    private String publisher;     // 出版社
    private int publishYear;      // 出版年份
    private String isbn;          // ISBN编号
    private String genre;         // 书籍类型

    /**
     * 构造方法
     * @param productId 商品编号
     * @param name 商品名称（书名）
     * @param price 商品价格
     * @param description 商品描述
     * @param stock 库存数量
     * @param author 作者
     * @param publisher 出版社
     * @param publishYear 出版年份
     * @param isbn ISBN编号
     * @param genre 书籍类型
     * @throws InvalidPriceException 当价格无效时抛出异常
     */
    public BookProduct(String productId, String name, double price, String description, int stock,
                      String author, String publisher, int publishYear, String isbn, String genre) throws InvalidPriceException {
        super(productId, name, price, description, stock);
        this.author = author != null ? author : "";
        this.publisher = publisher != null ? publisher : "";
        this.publishYear = Math.max(0, publishYear);  // 确保出版年份不为负数
        this.isbn = isbn != null ? isbn : "";
        this.genre = genre != null ? genre : "";
    }

    /**
     * 获取作者
     * @return 作者姓名
     */
    public String getAuthor() {
        return author;
    }

    /**
     * 设置作者
     * @param author 作者姓名，自动处理null值
     */
    public void setAuthor(String author) {
        this.author = author != null ? author : "";
    }

    /**
     * 获取出版社
     * @return 出版社名称
     */
    public String getPublisher() {
        return publisher;
    }

    /**
     * 设置出版社
     * @param publisher 出版社名称，自动处理null值
     */
    public void setPublisher(String publisher) {
        this.publisher = publisher != null ? publisher : "";
    }

    /**
     * 获取出版年份
     * @return 出版年份
     */
    public int getPublishYear() {
        return publishYear;
    }

    /**
     * 设置出版年份
     * @param publishYear 出版年份，确保不为负数
     */
    public void setPublishYear(int publishYear) {
        this.publishYear = Math.max(0, publishYear);
    }

    /**
     * 获取ISBN编号
     * @return ISBN编号
     */
    public String getIsbn() {
        return isbn;
    }

    /**
     * 设置ISBN编号
     * @param isbn ISBN编号，自动处理null值
     */
    public void setIsbn(String isbn) {
        this.isbn = isbn != null ? isbn : "";
    }

    /**
     * 获取书籍类型
     * @return 书籍类型
     */
    public String getGenre() {
        return genre;
    }

    /**
     * 设置书籍类型
     * @param genre 书籍类型，自动处理null值
     */
    public void setGenre(String genre) {
        this.genre = genre != null ? genre : "";
    }

    /**
     * 获取书籍出版信息
     * @return 出版信息
     */
    public String getPublishingInfo() {
        return publisher + "，" + publishYear + "年出版";
    }

    /**
     * 判断是否为新书（出版年份在最近5年内）
     * @return 是否为新书
     */
    public boolean isNewRelease() {
        // 获取当前年份
        int currentYear = java.time.Year.now().getValue();
        return publishYear >= currentYear - 5;
    }

    /**
     * 实现抽象方法，返回商品详细信息
     * @return 商品详细信息
     */
    @Override
    public String getDetails() {
        return toString() + "\n" +
               "商品类型: 书籍\n" +
               "作者: " + author + "\n" +
               "出版社: " + publisher + "\n" +
               "出版年份: " + publishYear + "\n" +
               "ISBN: " + isbn + "\n" +
               "类型: " + genre + "\n" +
               "描述: " + getDescription() + "\n" +
               "出版信息: " + getPublishingInfo() + "\n" +
               "是否新书: " + (isNewRelease() ? "是" : "否");
    }
}